All digital communication systems need channel encoders, as shown in FIG. 1. The channel coder is used to resist various noises and interferences during a transmission process, by manually adding redundant information so that the system is capable of automatic error correction, and thereby reliability of digital transmission can be guaranteed. The low density parity check (LDPC) code is a type of linear block code that can be defined by a very sparse parity check matrix or bipartite graph, and since it is initially discovered by Gallager, it is referred to as Gallager code. Over decades of silence, with the development of computer hardware and relevant theories, MacKay and Neal rediscovered it and proved that it has a property of approximating to the Shannon limit. Latest research shows that the low density parity check code has characteristics of low decoding complexity, capability of linear-time encoding, having a property of approximating to the Shannon limit, capability of parallel decoding, and having a performance better than that of Turbo code in the case of a long code length.
The LDPC code is a linear block code based on a sparse check matrix, and utilizing the sparseness of its check matrix, low complexity encoding and decoding can be implemented, so that the LDPC code becomes practical. The Gallager code mentioned previously is a regular LDPCC, while Luby and Mitzenmacher et al extended the Gallager code and proposed an irregular LDPCC. The LDPC code has plenty of decoding algorithms, wherein, the Message Passing algorithm or the Belief Propagation algorithm (BP algorithm) is a mainstream and basic algorithm of the LDPC code, and so far a lot of improved effective decoding algorithms have emerged.
The graphical form of a LDPC parity check matrix is a bipartite graph. There is a one-to-one correspondence between the bipartite graph and the check matrix, and an M*N parity check matrix H defines a constraint that each codeword of N bits satisfies M parity check sets. A bipartite graph comprises N variable nodes and M parity check nodes. If the mth check relates to the nth bit, that is, for the element Hm at the mth row and nth column in H, n=1, there will be a line connecting the check node m and the variable node n. In a bipartite graph, there will be no connection between any nodes of the same type, and the total number of sides in the bipartite graph is equal to the number of non-zero elements in the check matrix.
A special type of LDPC code gradually becomes a mainstream application due to its structured characteristics. Supposing the parity check matrix H of this type of LDPC code is a (M×z)×(N×z) matrix consisting of M×N block matrices, each of which is a different power of a z×z basic permutation matrix, and if the basic permutation matrix is an identity matrix, the block matrices are all cyclic shift matrices of the identity matrix (right shift by default in this disclosure). It has a form as follows:
If the power hijb=−1, then Phijb=0. If hijb is an integer no less than 0, it is defined
  H  =      [                            1                          0                          0                          0                          1                          0                          1                          0                          0                          0                          0                          0                                      0                          1                          0                          0                          0                          1                          0                          1                          0                          0                          0                          0                                      0                          0                          1                          1                          0                          0                          0                          0                          1                          0                          0                          0                                      0                          0                          1                          0                          1                          0                          0                          0                          1                          0                          1                          0                                      1                          0                          0                          0                          0                          1                          1                          0                          0                          0                          0                          1                                      0                          1                          0                          1                          0                          0                          0                          1                          0                          1                          0                          0                      ]  
Phijb=(P)hijb, herein P is a standard z×z permutation matrix shown as follows:
  P  =      [                            0                          1                          0                          ⋯                          0                                      0                          0                          1                          ⋯                          0                                      ⋯                          ⋯                          ⋯                          ⋯                          ⋯                                      0                          0                          0                          ⋯                          1                                      1                          0                          0                          ⋯                          0                      ]  
With such a power hijb, each block matrix can be uniquely identified, and the power of the identity matrix can be represented by 0, and a zero matrix is generally represented by −1. As such, if each block matrix of H is replaced with its power, a mb×nb power matrix Hb can be acquired. Here, Hb is defined as the base matrix of H, and H is referred to as the expanded matrix of Hb. In practical encoding, z=code length/the number of columns nb of the base matrix is referred to as the expand factor.
  H  =            [                                                  P                              h                00                b                                                                        P                              h                01                b                                                                        P                              h                02                b                                                          ⋯                                              P                              h                                  0                  ⁢                                      n                    b                                                  b                                                                                        P                              h                10                b                                                                        P                              h                11                b                                                                        P                              h                12                b                                                          ⋯                                              P                              h                                  1                  ⁢                                      n                    b                                                  b                                                                          ⋯                                ⋯                                ⋯                                ⋯                                ⋯                                                              P                              h                                                      m                    b                                    ⁢                  0                                b                                                                        P                              h                                                      m                    b                                    ⁢                  1                                b                                                                        P                              h                                                      m                    b                                    ⁢                  2                                b                                                          ⋯                                              P                              h                                                      m                    b                                    ⁢                                      n                    b                                                  b                                                        ]        =          P              H        b            
For example, the matrix H can be acquired by expanding a 2×4 base matrix Hb with the following parameter z:
  z  =            3      ⁢                          ⁢      and      ⁢                          ⁢              H        b              =          [                                    0                                1                                0                                              -              1                                                            2                                1                                2                                1                              ]      
Therefore, it can also be said that the LDPC code encoder of the present invention is uniquely generated by a base matrix Hb, an expand factor z and a selected basic permutation matrix.
If a base matrix is utilized for each LDPC code with a different expand factor, then for each different code length, said LDPC code encoder needs to store a base matrix, and if there are plenty of code lengths, plenty of basic matrices have to be stored, which will bring problems of representation and storage. Therefore, if it is needed to implement a variable code length, LDPC codes with different code lengths within a certain range and the same code rate will use a uniform base matrix which we define as a uniform base matrix Hbuniform. If a code length is different, a parity check matrix H can be obtained by modifying and extending the Hbuniform, and as a result, the generated codec can apply to a variable code length.
The modification is a modification of the non-negative values in the base matrix Hb utilizing an expand factor with a different code length, and the value of the modified element should be less than the value of the expand factor with the code length. There are a lot of modification algorithms, for example, mod, scale+floor, scale+round or the like can be utilized. Supposing Pij is a non-negative element of 1 at the ith row and jth column of the base matrix Nb, Pij′ is a non-negative element of 1 at the ith row and jth column of the modified matrix Hbmodified, then:
With the mod method,
      P    ij    ′    ≡            P      ij        ⁢                  ⁢    mod    ⁢                  ⁢    z    ≡            P      ij        ⁢                  ⁢    mod    ⁢                  ⁢          N              n        b            
With the scale+floor method,
      P    ij    ′    =            ⌊                        P          ij                ×                  z                      z            max                              ⌋        =          ⌊                        P          ij                ×                  N                      N            max                              ⌋      
With the scale+round method:
      P    ij    ′    =            Round      ⁢                          ⁢              (                              P            ij                    ×                      z                          z              max                                      )              =          Round      ⁢                          ⁢              (                              P            ij                    ×                      N                          N              max                                      )            
Wherein, z is the expand factor corresponding to the current code length, i.e. the number of rows or columns of the block matrix; zmax is the expand factor corresponding to the maximum code length supported. mod is a modulus operation, └ ┘ is a flooring operation and Round is a rounding operation.
In IEEE802.16e, the LDPC code supports code rates of ½, ⅔, ¾ and ⅚, so there are four base matrices, and it becomes difficult to use a unique encoder/decoder to implement encoding and decoding with different code rates; if the four code rates need four codec, hardware cost will become an application bottleneck. But this type of LDPC code with a specific code rate and variable code length has a uniform base matrix, and only one encoder/decoder needs to be used. Wherein, the encoding method and encoder can be acquired with reference to a Chinese patent application of which the application number is 200710072808.0 and the patent name is “an apparatus and method for encoding the LDPC code supporting incremental redundancy HARQ”.
HARQ is an extremely important link adaptation technology in a wireless communication system.
The HARQ method will be briefly described below. The method comprises two parts: a transmission method of a transmitter and a reception method of a receiver, and the method should be universal.
The transmission method of the transmitter comprises:
a. The transmitter sends the first HARQ packet in a specified HARQ channel, a new HARQ transmission starts, and the retransmission counter is set to 1;
b. The transmitter waits for an ACK/NAK sent by the receiver;
c. After a certain delay (depending on whether it is synchronous mode or asynchronous mode, the delay is decided by the system), if the transmitter receives the ACK, then the packet is correctly received and this HARQ transmission ends; otherwise, the retransmission counter is added by 1, and whether the number of retransmissions exceeds the maximum number of retransmissions permitted is determined, if yes, then this HARQ transmission ends, otherwise, proceeds to d;
d. The transmitter tries another HARQ in the HARQ channel of this HARQ transmission, the sending time can be selected by the system, and returns to b.
The reception method of the receiver comprises:
a. Receive a HARQ packet, and determine whether the received packet is the first HARQ attempt, if yes, proceed to b; otherwise proceed to d;
b. Discard all the HARQ attempts previously received in this HARQ channel;
c. Decode the packet, and proceed to e;
d. The decoder of the receiver combines the originally error and retransmitted encoding packets according to a specific combination method;
e. If the decoding is correct, then after a certain delay, send the ACK in a feedback channel which is allocated by the system; otherwise, send the NAK and store the HARQ packet.
In the step d of the above reception method, the combination method may comprise full incremental redundancy, partial incremental redundancy and Chase combination.
How to support the HARQ based on the LDPC code supporting any code length and any code rate and make the LDPC HARQ channel encoding have the optimal performance is a problem to be researched and solved at present.